<html>
<head><meta charset="utf-8"><title>PubGrub algorithm discussion · t-cargo · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/index.html">t-cargo</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html">PubGrub algorithm discussion</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="209663193"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209663193" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209663193">(Sep 10 2020 at 15:24)</a>:</h4>
<p>PubGrub is a algorithm for doing dependency resolution. It is particularly interesting for its great error messages, and its careful thoughts about algorithmic complexity and modularity. This is a stream for discussion of resources about the algorithm and its relation to the rust ecosystem. It has bean 2.5 years, so no one should expect fast progress. But here are some links I know about. :-)<br>
I have been interested in it since the first blog post:<br>
<a href="https://medium.com/@nex3/pubgrub-2fb6470504f">https://medium.com/@nex3/pubgrub-2fb6470504f</a><br>
There is also detailed documentation at:<br>
<a href="https://github.com/dart-lang/pub/blob/master/doc/solver.md">https://github.com/dart-lang/pub/blob/master/doc/solver.md</a><br>
Cargo has a issue I posted about trying to steel the good error messages:<br>
<a href="https://github.com/rust-lang/cargo/issues/5284">https://github.com/rust-lang/cargo/issues/5284</a><br>
I also posted some questions on pubs issue:<br>
<a href="https://github.com/dart-lang/pub/issues/2089">https://github.com/dart-lang/pub/issues/2089</a><br>
And recently <span class="user-mention" data-user-id="340766">@Alex Tokarev</span> pointed out that there is a Elm implementation:<br>
<a href="https://github.com/mpizenberg/elm-pubgrub/tree/dev">https://github.com/mpizenberg/elm-pubgrub/tree/dev</a></p>



<a name="209703713"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209703713" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209703713">(Sep 10 2020 at 20:19)</a>:</h4>
<p>So I can think of several things that Cargo can already do that the algorithm as described can not:</p>
<ul>
<li><code>feature</code> flags. I can conceive of how to add this. but more importantly the Dart implementation has it inspired by how it works in Cargo. It is not documented but, we can figure out what was done there as a starting point.</li>
<li><code>one per major</code> instead one <code>one per name</code>. PubGrub assumes that anything that matches a dependency will have the same name, and that there is only one version that can be selected per Name. We will need to find a way to relax one of those, as Cargo allows <code>foo="1.0"</code> and <code>foo="2.0"</code> in the same tree. But both assumptions are deeply baked into the algorithm, and we will need to be careful.</li>
<li><code>links attributes</code> cargo bans two crates with the same <code>links attributes</code> in the same build. (conservatively in the same tree for now.) This can defintly be supported but may have <code>O(n^2)</code> incompatibilities per links. And I don't know how that will affect error messages.</li>
<li><code>Public&amp;Private</code> dependency ... this is very hard to explain ... and only has limited support in Cargo now. So we will think about it then.</li>
</ul>



<a name="209703911"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209703911" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209703911">(Sep 10 2020 at 20:21)</a>:</h4>
<p><span class="user-mention" data-user-id="120179">@Eh2406</span> It <em>should</em> be possible to express <code>links</code> as a special kind of conflict.</p>



<a name="209704097"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209704097" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209704097">(Sep 10 2020 at 20:22)</a>:</h4>
<p>You could declare that foo-sys 1.2.3 depends on links:foo == foo-sys-1.2.3 , where every version of links:foo is incompatible with every other version.</p>



<a name="209705340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209705340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209705340">(Sep 10 2020 at 20:33)</a>:</h4>
<p>Right, that may work. The algorithm assumes that you can quickly get the list of all mutually exclusive versions of a crate (I think). Our current index does support that for crates (there all in one file) but it doesn't support it for all things with the same <code>links:foo</code>. Can we add an alternative to a mutually exclusive set as we find them? We will see as the implementation comes together.</p>



<a name="209706402"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209706402" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209706402">(Sep 10 2020 at 20:43)</a>:</h4>
<p>Are <code>links</code> included in the cargo index, without having to download the crate?</p>



<a name="209706534"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209706534" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209706534">(Sep 10 2020 at 20:44)</a>:</h4>
<p>If they have been published in the past few years, yes.</p>



<a name="209707269"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707269" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707269">(Sep 10 2020 at 20:50)</a>:</h4>
<p>Ah, hmmm.</p>



<a name="209707344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707344">(Sep 10 2020 at 20:51)</a>:</h4>
<p>So, ignoring the case of old crates where we don't have that information, for crates where we do, we should be able to fill in all the versions of <code>links:foo</code> in advance, by just scanning all the versions of crates we're otherwise considering.</p>



<a name="209707369"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707369" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707369">(Sep 10 2020 at 20:51)</a>:</h4>
<p>At least, for any crate we're already feeding into the pubgrub implementation.</p>



<a name="209707496"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707496" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707496">(Sep 10 2020 at 20:52)</a>:</h4>
<p>Both PubGrub and Cargos resolver ask for Crates in a lazy fashion.</p>



<a name="209707533"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707533" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707533">(Sep 10 2020 at 20:52)</a>:</h4>
<p>Ah.</p>



<a name="209707577"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707577" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707577">(Sep 10 2020 at 20:53)</a>:</h4>
<p>Which means it might ask for a given crate and then notice the reference to links:foo so it would ask for links:foo, but we don't know everything about links:foo yet.</p>



<a name="209707607"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707607" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707607">(Sep 10 2020 at 20:53)</a>:</h4>
<p>exactly.</p>



<a name="209707612"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707612" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707612">(Sep 10 2020 at 20:53)</a>:</h4>
<p>Then yeah, we need to find out if the pubgrub algorithm can handle being told about some versions of a package without being told about all versions of a package yet.</p>



<a name="209707698"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707698" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707698">(Sep 10 2020 at 20:54)</a>:</h4>
<p>Either that or we locally scan the index and create our own reverse index for each <code>links</code>.</p>



<a name="209707719"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707719" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707719">(Sep 10 2020 at 20:54)</a>:</h4>
<p>(which doesn't seem especially hard, if we have to, but let's avoid it if we can)</p>



<a name="209707723"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209707723" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209707723">(Sep 10 2020 at 20:54)</a>:</h4>
<p>I think you may be correct that this will just work when we get there, but it is something we are going to need to add.</p>



<a name="209710222"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/209710222" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#209710222">(Sep 10 2020 at 21:15)</a>:</h4>
<p>Thinking about it more. The list all versions may only be needed when we have to arbitrarily pick one from it. I.E. "the only thing you wanted was <code>serde="1.0"</code>. so lets try the newest version." If so, and if we can make that part of the API lazy, then the speshal <code>links:foo</code> crate can <code>panic</code> if it gets there. As we should only have <code>"="</code>constraints on the speshal links crates. This may just work. Thanks for the suggestion.</p>



<a name="210068823"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/210068823" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#210068823">(Sep 14 2020 at 22:05)</a>:</h4>
<p>My most serious attempt to bring the ideas to Cargo floundered on dealing with integrating with the existing structure. My most serious attempt to RIIR suffered from second-system syndrome, I had lots of ideas on how to make it more general/performance so I failed to get started anyware.</p>
<p>So if I were asked how we should best get started on a new attempt, my 2c is:</p>
<ul>
<li>
<ol>
<li>get something working by doing as direct a port as is feasible with the language translation. Are the names hard coded as type <code>String</code>, does it require all the index data upfront, does it use <code>clone</code> a lot? All good if it can get tests running.</li>
</ol>
</li>
<li>
<ol start="2">
<li>get all of the existing tests ported over from Dart/Elm and get them passing.</li>
</ol>
</li>
<li>
<ol start="3">
<li>Clean things up. Let's make the name type generic so it works with a user supplied <code>InternedString</code>. Lets only interact with the Index thu a trate. Profile, Rc/Intern to avoid the Clones. Set up Fuzz testing. Try and make it usable as a library.</li>
</ol>
</li>
<li>
<ol start="4">
<li>If at this point we have an example of the algorithm or even better a library that "just" does what the base algorithme can do we should be proud! It will be useful for someone interested in porting Pip/Npm/Pub to rust. That is nothing to sneeze at. Publicize this win!</li>
</ol>
</li>
<li>
<ol start="5">
<li>Start adding the features that Cargo has that the base algorithme does not have. (discussed above.)</li>
</ol>
</li>
<li>
<ol start="6">
<li>Try to get Cargo to use it.</li>
</ol>
</li>
</ul>



<a name="210094052"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/210094052" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#210094052">(Sep 15 2020 at 06:23)</a>:</h4>
<p><span class="user-mention" data-user-id="120179">@Eh2406</span> That sounds like a great plan.</p>



<a name="211892176"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/211892176" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#211892176">(Oct 01 2020 at 10:38)</a>:</h4>
<p>Hi, I was just invited here by Jacob and Alex</p>
<p>I finished (as in usable but not perfect) recently my port of the elm port (in-port-ception) to rust. Here it is: <a href="https://github.com/mpizenberg/pubgrub-rs">https://github.com/mpizenberg/pubgrub-rs</a></p>
<p>I think that checks a lot of the points above but a lot to do to make it cargo-friendly still. I haven't imported tests from dart. Cloning is used quite a lot in the code because I didn't think that it would have much impact performance-wise and also I don't have any benchmark to verify if it does. But the code is generic regarding packages and versions.</p>
<p>You can follow the home API doc to have a feel for what it looks like using it as-is: <a href="https://docs.rs/pubgrub/0.1.0/pubgrub/">https://docs.rs/pubgrub/0.1.0/pubgrub/</a>. And deep dive into the code should be easy I think since there is documentation everywhere.</p>



<a name="211903347"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/211903347" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Tokarev <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#211903347">(Oct 01 2020 at 12:44)</a>:</h4>
<p>Hi everyone and welcome <span class="user-mention" data-user-id="348419">@Matthieu Pizenberg</span>. I'm excited to get the initial feedback for the library!</p>
<p>We had some ideas on how some things could be changed, but decided to wait for the feedback since it's not clear whether they would be improvements in the end. I'll post concrete discussion points later: I'd like people to have a fresh look without focusing on specific things first. It should show what looks like a real problem and what does not.</p>
<p>I think porting more tests from the original testing suite is a worthwhile investment, so until we gather such feedback and prioritize future changes I'm going to do just that :)</p>



<a name="211911388"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/211911388" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#211911388">(Oct 01 2020 at 13:41)</a>:</h4>
<p>This is amazing work! So much progress! And, a new <del>co conspirator</del> collaborator! Welcome <span class="user-mention" data-user-id="348419">@Matthieu Pizenberg</span>!<br>
Reading the excellent documentation, I love the api so far! I love how everything is bounded by a trate, that will make it easier to test and to adapt to different use cases! (I seem to be exclaiming a lot, I am just excited.)</p>



<a name="211979535"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/211979535" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#211979535">(Oct 01 2020 at 21:42)</a>:</h4>
<p>I spent some time looking at the code this afternoon. It is looking good. I have some Nits, but nothing important.  I was removing a clone in a function when I realized that the function is not (yet) used.  I think we will want to be careful with HashMaps that have random seeds, from my experience it is hard to diagnose a performance problem that only shows up some of the time. The best way I have found to identify performance problems is to have lots of users :-P but until that comes along Cargo uses proptest to make large indexes to check. It have found numerous  performance problems in Cargo and even a handful of correctness issues. The code lives at <a href="https://github.com/rust-lang/cargo/blob/556c236f9ad3ea7e7be0ddb8ba547fabc292e6d4/crates/resolver-tests/src/lib.rs#L751-L886">https://github.com/rust-lang/cargo/blob/556c236f9ad3ea7e7be0ddb8ba547fabc292e6d4/crates/resolver-tests/src/lib.rs#L751-L886</a>, and I am well started porting it over. :-)</p>



<a name="212044765"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212044765" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212044765">(Oct 02 2020 at 08:13)</a>:</h4>
<p>It's great that you managed to generate registries with enough coherence to have valid set of dependencies! That's one thing I was struggling with when trying to property test the elm version.</p>



<a name="212055886"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212055886" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212055886">(Oct 02 2020 at 10:12)</a>:</h4>
<p><span class="user-mention" data-user-id="120179">@Eh2406</span> You should have received an invitation for the pubgrub-rs repository so that you can easily push on it. For now we settled on using a new branch for doing new stuff, and making a PR to dev when it's ready. Master stays in sync with latest published version  whereas dev has the new development if that's ok with you too.</p>



<a name="212069231"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212069231" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212069231">(Oct 02 2020 at 12:48)</a>:</h4>
<p>Thanks for the invite. Don't push to master, good plan.</p>



<a name="212070006"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212070006" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212070006">(Oct 02 2020 at 12:55)</a>:</h4>
<p>Getting a registry working, took a lot of work, and two pages of unreadable code.  I am hoping that I can simplify it thanks to your trates.</p>



<a name="212223848"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212223848" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Alex Tokarev <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212223848">(Oct 04 2020 at 13:40)</a>:</h4>
<p>We just received a comment saying that implementing a trait automatically is a bad practice. It is currently done for the Package trait. Does anyone have thoughts on this matter?<br>
<a href="https://github.com/mpizenberg/pubgrub-rs/issues/10">https://github.com/mpizenberg/pubgrub-rs/issues/10</a></p>



<a name="212353199"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212353199" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212353199">(Oct 05 2020 at 20:35)</a>:</h4>
<p>Hi, just a short message to say that I'll not be very responsive until end of week I think, ton of work for a couple of days</p>



<a name="212354074"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212354074" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212354074">(Oct 05 2020 at 20:42)</a>:</h4>
<p><span class="user-mention" data-user-id="340766">@Alex Tokarev</span>  and I seem to be excitedly making progress. How do you want us to proceed while you are unavailable? Should we wait  until you get back to merge PRs?</p>



<a name="212456208"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212456208" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212456208">(Oct 06 2020 at 17:00)</a>:</h4>
<p>ahah I can see that, and I'm fairly excited to. A bit too much to be honest ahah so I'm squeezing every time I have reading what you are doing. The problem is I have difficulty staying focused on my post doc stuff because of the excitement ^^.</p>



<a name="212456678"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212456678" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212456678">(Oct 06 2020 at 17:04)</a>:</h4>
<p>for the time being if that's ok, I'd like to at least read and respond on each PR, but I certainly will not write code on the repo I think. Also, I haven't discussed that with you yet, but seems you seem quite interested in this, what do you think of transferring to a github organization after v0.2 is published. Like so I could scale back since I was mostly interested in this for elm-test-rs</p>



<a name="212457389"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212457389" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212457389">(Oct 06 2020 at 17:11)</a>:</h4>
<p>We won't merge until you comment that you are ok on each one. An org may make sense, but if you want to scale back feel free to delegate responsibilities.</p>



<a name="212457722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212457722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212457722">(Oct 06 2020 at 17:14)</a>:</h4>
<p>Thanks for confirmation and offer. I'll definitely delegate more soonish</p>



<a name="212462081"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212462081" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212462081">(Oct 06 2020 at 17:52)</a>:</h4>
<p>Does anyone object to opening a stream #t-cargo/pubgrub so we have a place to chat and don't spam cargo with our work on the library?</p>



<a name="212465996"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212465996" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthieu Pizenberg <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212465996">(Oct 06 2020 at 18:24)</a>:</h4>
<p>the <span aria-label="+1" class="emoji emoji-1f44d" role="img" title="+1">:+1:</span> is not for "object to" but agree to ahah</p>



<a name="212470361"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/212470361" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#212470361">(Oct 06 2020 at 19:00)</a>:</h4>
<p><a href="#narrow/stream/260232-t-cargo.2FPubGrub">https://rust-lang.zulipchat.com/#narrow/stream/260232-t-cargo.2FPubGrub</a></p>



<a name="213615358"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/213615358" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#213615358">(Oct 16 2020 at 21:17)</a>:</h4>
<p>Things are proceeding well over in <a class="stream" data-stream-id="260232" href="/#narrow/stream/260232-t-cargo.2FPubGrub">#t-cargo/PubGrub</a> and in <a href="https://github.com/mpizenberg/pubgrub-rs">https://github.com/mpizenberg/pubgrub-rs</a>, but we seem to be outgrowing a personal repo. So it will soon be time for a github org. Eventually, it may be under the control of  the Cargo team. But it is a long way from that happening. So where do we move to? Do we make are own org, or is there one that makes sense for us to join? Is <code>rust-lang-nursery</code> still a thing?</p>



<a name="213624570"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/213624570" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#213624570">(Oct 16 2020 at 23:33)</a>:</h4>
<p>The nursery is deprecated.</p>



<a name="213624612"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/213624612" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Josh Triplett <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#213624612">(Oct 16 2020 at 23:34)</a>:</h4>
<p>I would suggest creating a dedicated GitHub organization for now, and we can eventually move the repository to rust-lang once cargo incorporates it.</p>



<a name="217308981"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/246057-t-cargo/topic/PubGrub%20algorithm%20discussion/near/217308981" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Eh2406 <a href="https://rust-lang.github.io/zulip_archive/stream/246057-t-cargo/topic/PubGrub.20algorithm.20discussion.html#217308981">(Nov 19 2020 at 18:13)</a>:</h4>
<p>Just wanted to let the <span class="user-group-mention" data-user-group-id="3139">@T-cargo</span> and anyone watch here that we have a new release of the crate and an announcement on <a href="https://www.reddit.com/r/rust/comments/jx794b/announcing_pubgrub_v02_a_flexible_version_solver/">reddit</a>. We also have the first real world use case in this analysis of the elm packages, <a href="https://discourse.elm-lang.org/t/solving-dependencies-of-11079-elm-packages-in-less-than-1s/6541">here</a>. Big thanks to <span class="user-mention" data-user-id="348419">@Matthieu Pizenberg</span> and <span class="user-mention" data-user-id="340766">@Alex Tokarev</span> for all the work and the careful reviews!</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>